/**
 * 数据源管理
 *
 * create by 姚巨磊  2017年3月14日15:20:30
 *
 *
 */
define(["require", "jquery", 'public/app'], function (require, $, app) {

    function dataSource($container) {
        this._$container = $container;
        this._initLayout();
        this._init();
    }

    dataSource.prototype = {
        _initLayout: function () {
            $('#graph_dataSource_layout').layout();
        },
        /**
         * 初始化url地址
         * @private
         */
        _initUrlPath: function () {
            this.urlPaths = {
                dsData: app.urlBuild("/dirms/dev/dataSource/all"),
                saveDs: app.urlBuild("/dirms/dev/dataSource/save")
            };
        },

        /**
         * 初始化类
         * @private
         */
        _init: function () {
            this._initUrlPath();
            this._initComponents();
        },

        /**
         * 初始化控件
         * @param readyData
         * @private
         */
        _initComponents: function () {
            this._initDatagrid();
            this._initCommboBox();
            this._initDialog();
            this._initEventBinding();
        },

        /**
         * 初始化所有下拉框
         *
         * @private
         */
        _initCommboBox: function () {
            //是否刷新
            this._$container.find("#dsType").combobox({
                valueField: 'id',
                textField: 'value',
                data: [{id: 'url', value: 'url'}, {id: 'sql', value: 'sql'}]
            });

        },

        /**
         * 初始化所有表格信息
         * @private
         */
        _initDatagrid: function () {
            var self = this;
            /**
             * 数据源-主表格
             */
            self._$container.find("#graph_dataSource_datagrid").datagrid({
                rownumbers: true,
                pagination: true,
                singleSelect: true,
                url: this.urlPaths.dsData,
                method: 'get',
                width: 'auto',
                height: '100%',
                //对应model层字段
                columns: [[
                    {field: 'id', title: "", width: 100, hidden: true},
                    {field: 'dsName', title: '数据项名称', width: '16%'},
                    {field: 'dsType', title: '数据项类型', width: '16%'},
                    //{field: 'valMethod', title: '取值方法', width: '8%'},
                    //{field: 'params', title: '入参', width: '10%'},
                    //{field: 'valType', title: '值格式', width: '8%'},
                    {field: 'valStr', title: '取数字符串', width: '60%'}
                ]],
                toolbar: this._$container.find("#graph_dataSource_tb")
            });


            /**
             * 图形系列信息
             */
            self._$container.find("#dataSource_item_datagrid").datagrid({
                width: 'auto',
                height: '100%',
                showGroup: false,
                scrollbarSize: 0,
                columns: [[
                    {
                        field: 'key', title: '键值', width: '50%', editor: "textbox"
                    },
                    {field: 'remark', title: '备注', width: '45%', editor: "textbox"}

                ]],
                toolbar: this._$container.find("#dataSource_item_tb")

            });
        }
        ,
        /**
         * 初始化所有对话框
         *
         * @private
         */
        _initDialog: function () {
            var self = this;
            //添加数据源对话框
            self._$container.find("#dataSource_graphDialog").dialog({
                title: '添加数据源',
                closed: true,
                width: '650px',
                height: '600px',
                buttons: [
                    {
                        text: '提交', id: 'saveDs', iconCls: 'icon-ok', handler: function () {
                        //提交保存新添加的角色
                        var formData = $("#dataSource_graph_form").serializeJson();
                        //配置项信息
                        self._actions.endEdit();
                        var rowdata = $('#dataSource_item_datagrid').datagrid('getData');
                        var items = {};
                        $.grep(rowdata, function (n, i) {
                            items[n["key"]] = n["remark"];
                        });
                        var params = {};
                        params.rowdata = rowdata;
                        params.items = items;
                        formData["params"] = JSON.stringify(params);
                        if (formData["id"] == "")formData["id"] = null;
                        $.ajax({
                            url: self.urlPaths.saveDs,
                            type: "POST",
                            cache: false,
                            contentType: "application/json",
                            dataType: "json",
                            data: JSON.stringify(formData),
                            success: function () {
                                $("#graph_dataSource_datagrid").datagrid('reload', {
                                    url: self.urlPaths.graphsData
                                });
                                $("#dataSource_graphDialog").dialog('close');
                                $.messager.alert('提示：', '添加成功');
                            }
                        });
                    }
                    },
                    {
                        text: '取消', iconCls: 'icon-cancel', handler: function () {
                        $('#dataSource_graphDialog').dialog('close');
                    }
                    }
                ]
            });
        }

        ,
        /**
         * 事件绑定
         * @private
         */
        _initEventBinding: function () {
            //【todo 在此编写绑定事件的方法。如按钮需要绑定的click事件。建议按如下格式绑定，并将this作为参数传入】
            this._$container.find('#graph_dataSource_add').on('click', {self: this}, this._actions.addClick);
            this._$container.find('#graph_dataSource_edit').on('click', {self: this}, this._actions.editClick);
            this._$container.find('#graph_dataSource_remove').on('click', {self: this}, this._actions.removeClick);
            this._$container.find('#graph_dataSource_queryBtn').on('click', {self: this}, this._actions.queryClick);

            $('#dataSource_item_add_btn').on('click', {self: this}, this._actions.addItemClick);
            $('#dataSource_item_edit_btn').on('click', {self: this}, this._actions.editItemClick);
            $('#dataSource_item_remove_btn').on('click', {self: this}, this._actions.removeItemClick);
            $('#dataSource_connect_btn').on('click', {self: this}, this._actions.connectClick);

        }
        ,

        /**
         * 按钮事件
         */
        _actions: {
            /**
             * 点击主界面添加按钮
             * 弹出数据源添加界面
             *
             * @param evt
             */
            addClick: function (evt) {
                $('#dataSource_graph_form').form('clear');
                $("#dataSource_item_datagrid").datagrid("reload");
                $("#dataSource_graphDialog").dialog("open");
            }
            ,
            /**
             * 选中主界面表格一条数据源数据
             * 点击编辑按钮，弹出数据源编辑界面
             *
             * @param evt
             */
            editClick: function (evt) {
                var row = $('#graph_dataSource_datagrid').datagrid('getSelected');
                if (row != null) {
                    $('#dataSource_graph_form').form('load', row);
                    if (row["params"] && row["params"] != "" && row["params"].length > 0) {
                        $("#dataSource_item_datagrid").datagrid("loadData", eval("(" + row["params"] + ")")["rowdata"]);
                    }
                    $("#dataSource_graphDialog").dialog("open");
                }
                else {
                    $.messager.alert('提示：', '请选择要编辑的数据源。');
                }
            }
            ,
            /**
             * 删除数据源记录
             */
            removeClick: function () {
                var row = $('#graph_dataSource_datagrid').datagrid('getSelected');
                if (row != null) {
                    $.messager.confirm('确认', '确定要移除该数据源及其下属所有信息吗?', function (r) {
                        if (r) {
                            $.ajax({
                                type: 'delete',
                                url: app.urlBuild("/dirms/dev/dataSource/" + row.id),
                                success: function () {
                                    $('#graph_dataSource_datagrid').datagrid('reload', {url: app.urlBuild("/dirms/dev/graphs/all")});
                                    $('#dataSource_graph_form').form('clear');
                                }
                            });
                        }
                    });
                }
                else {
                    $.messager.alert('提示：', '请选择要删除的数据源。');
                }
            }
            ,
            /**
             * 查询数据源数据
             *
             * @param evt
             */
            queryClick: function (evt) {
                $('#graph_dataSource_datagrid').datagrid('reload', {url: app.urlBuild("/dirms/dev/dataSource/all")});
            },
            /**
             * 添加数据项
             * @param evt
             */
            addItemClick: function (evt) {
                $('#dataSource_item_datagrid').datagrid('appendRow', {editor: "textbox"});
                var index = $('#dataSource_item_datagrid').datagrid('getRows').length - 1;
                $('#dataSource_item_datagrid').datagrid('selectRow', index)
                    .datagrid('beginEdit', index);
            },
            /**
             * 编辑数据项
             * @param evt
             */
            editItemClick: function (evt) {
                var row = $('#dataSource_item_datagrid').datagrid('getSelected');
                var index = $('#dataSource_item_datagrid').datagrid('getRowIndex', row);
                $('#dataSource_item_datagrid').datagrid('beginEdit', index);
            },
            /**
             * 移除数据项
             * @param evt
             */
            removeItemClick: function (evt) {
                var row = $('#dataSource_item_datagrid').datagrid('getSelected');
                if (row) {
                    var index = $('#dataSource_item_datagrid').datagrid('getRowIndex', row);
                    $.messager.confirm('提示信息：', '确认是否删除数据？', function (r) {
                        if (r) {
                            $('#dataSource_item_datagrid').datagrid('deleteRow', index);
                        }
                    });
                } else {
                    $.messager.alert('提示信息：', '请选择一条记录！');
                    return false;
                }
            },
            /**
             * 测试数据连接
             * @param evt
             */
            connectClick: function (evt) {
                var formData = $("#dataSource_graph_form").serializeJson();
                $.ajax({
                    type: 'post',
                    data: JSON.stringify(formData),
                    contentType:"application/json; charset=UTF-8",
                    url: app.urlBuild("/dirms/dev/dataSource/connect"),
                    success: function (data) {
                        $.messager.alert("结果：",JSON.stringify(data));
                    }
                });
            }
            ,//结束所有编辑状态
            endEdit: function () {
                var rows = $('#dataSource_item_datagrid').datagrid('getRows');
                for (var i = 0; i < rows.length; i++) {
                    $('#dataSource_item_datagrid').datagrid('endEdit', i);
                }
            }
        }
    };

    return dataSource;
})
;